﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 利用TableLayoutPanel类展示表格
{
    public partial class Form1 : Form
    {
        TableLayoutPanel table = new TableLayoutPanel();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 默认添加一行数据
            table.Dock = DockStyle.Top;     //顶部填充
            panel1.Controls.Add(table);
            table.ColumnCount = 5;          //5列
            table.Height = table.RowCount * 40; //table的整体高度，每行40

            table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, table.Width * 0.2f));    //利用百分比计算，0.2f表示占用本行长度的20%
            table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, table.Width * 0.2f));
            table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, table.Width * 0.2f));
            table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, table.Width * 0.2f));
            table.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, table.Width * 0.2f));

            for (int i = 1; i <= 2; i++)
            {
                AddRow("苹果" + i.ToString().PadLeft(2, '0'), "橘子" + i.ToString().PadLeft(2, '0'), "香蕉" + i.ToString().PadLeft(2, '0'), "香瓜" + i.ToString().PadLeft(2, '0'), "甘蔗" + i.ToString().PadLeft(2, '0'));
            }
        }

        private void AddRow(string apple, string orange, string banana, string casaba, string sugarcane)
        {
            try
            {
                // 动态添加一行
                table.RowCount++;
                //设置高度,边框线也算高度，所以将40修改大一点
                table.Height = table.RowCount * 44;
                // 行高
                table.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40));
                // 设置cell样式，增加线条
                table.CellBorderStyle = TableLayoutPanelCellBorderStyle.OutsetPartial;

                int i = table.RowCount - 1;

                Label label1 = new Label();
                label1.Text = apple;
                label1.Width = 200;
                label1.Height = 40;
                label1.Font = new Font("隶书", 13, FontStyle.Bold);
                label1.TextAlign = ContentAlignment.MiddleCenter;
                table.Controls.Add(label1, 0, i);

                Label label2 = new Label();
                label2.Text = orange;
                label2.Width = 200;
                label2.Height = 40;
                label2.Font = new Font("隶书", 13, FontStyle.Bold);
                label2.TextAlign = ContentAlignment.MiddleCenter;
                table.Controls.Add(label2, 1, i);

                Label label3 = new Label();
                label3.Text = banana;
                label3.Width = 200;
                label3.Height = 40;
                label3.Font = new Font("隶书", 13, FontStyle.Bold);
                label3.TextAlign = ContentAlignment.MiddleCenter;
                table.Controls.Add(label3, 2, i);

                Label label4 = new Label();
                label4.Text = casaba;
                label4.Width = 200;
                label4.Height = 40;
                label4.Font = new Font("隶书", 13, FontStyle.Bold);
                label4.TextAlign = ContentAlignment.MiddleCenter;
                table.Controls.Add(label4, 3, i);

                Label label5 = new Label();
                label5.Text = sugarcane;
                label5.Width = 200;
                label5.Height = 40;
                label5.Font = new Font("隶书", 13, FontStyle.Bold);
                label5.TextAlign = ContentAlignment.MiddleCenter;
                table.Controls.Add(label5, 4, i);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.PadRight(30, ' '), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //查询第4行第4列数据，下标从0开始
            int i = 1;
            int j = 3;
            Label label = (Label)table.Controls[i * 5 + j];
            MessageBox.Show(label.Text);
        }
    }
}
